# -*- coding: cp1252 -*-
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from memositesm.regusuario.models import Usuario, Responsable
from memositesm.memo.models import memo, fecha_memo, Patrocinador, Semaforo
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_exempt
from django.template.context import RequestContext
import time
import datetime
import smtplib
from django.core.mail import send_mail
from email.mime.text import MIMEText

#Metodo utilizado para la aplicacion de android que regresa los memos pendientes
@csrf_exempt
def androidPendientes(request):
	if request.method == 'POST':
		if ((request.POST['us12'] == "adminAndroid") and (request.POST['ps12'] == "passEspecialAndroid336?234")):
			vigentes = memo.objects.filter(fecha_exp__gte = datetime.datetime.now())
			pend = Semaforo.objects.select_related().filter(firmauno=False, comentariosfirmauno__isnull=True) | Semaforo.objects.filter(firmados=False, comentariosfirmados__isnull=True) | Semaforo.objects.filter(firmatres=False, comentariosfirmatres__isnull=True) | Semaforo.objects.filter(firmacuatro=False, comentariosfirmacuatro__isnull=True)
			pendientes = pend.exclude(firmauno=False, comentariosfirmauno__isnull=False) 
			pendientes = pendientes.exclude(firmados=False, comentariosfirmados__isnull=False)
			pendientes = pendientes.exclude(firmatres=False, comentariosfirmatres__isnull=False)
			pendientes = pendientes.exclude(firmacuatro=False, comentariosfirmacuatro__isnull=False)
			pendientes = pendientes.filter(nummemo__in = vigentes)
		
			stringRegreso = ""
		
			for eachPendiente in pendientes:
				stringRegreso = stringRegreso + "/(/ " + eachPendiente.nummemo.patrocinador.nombre
		
			return HttpResponse(stringRegreso)
		else: return HttpResponse("Datos incorrectos. Acceso no autorizado.")
	else: return HttpResponse("Acceso no autorizado.")
#Metodo utilizado para la aplicacion de android que regresa los memos negados
@csrf_exempt
def androidNegados(request):
	if request.method == 'POST':
		if ((request.POST['us12'] == "adminAndroid") and (request.POST['ps12'] == "passEspecialAndroid336?234")):
			vigentes = memo.objects.filter(fecha_exp__gte = datetime.datetime.now())
			negados = Semaforo.objects.filter(firmauno=False, comentariosfirmauno__isnull=False) | Semaforo.objects.filter(firmados=False, comentariosfirmados__isnull=False) | Semaforo.objects.filter(firmatres=False, comentariosfirmatres__isnull=False) | Semaforo.objects.filter(firmacuatro=False, comentariosfirmacuatro__isnull=False)
			negados = negados.filter(nummemo__in = vigentes)
		
			stringRegreso = ""
		
			for eachNegado in negados:
				stringRegreso = stringRegreso + "/(/ " + eachPendiente.nummemo.patrocinador.nombre
		
			return HttpResponse(stringRegreso)
		else: return HttpResponse("Datos incorrectos. Acceso no autorizado.")
	else: return HttpResponse("Acceso no autorizado.")

#Metodo utilizado para la aplicacion de android que regresa los memos aprobados
@csrf_exempt
def androidAprobados(request):
	if request.method == 'POST':
		if ((request.POST['us12'] == "adminAndroid") and (request.POST['ps12'] == "passEspecialAndroid336?234")):
			vigentes = memo.objects.filter(fecha_exp__gte = datetime.datetime.now())
			aprobados = Semaforo.objects.filter(firmauno=True, firmados=True, firmatres=True, firmacuatro=True)
			aprobados = aprobados.filter(nummemo__in=vigentes)
		
			stringRegreso = ""
		
			for eachAprobado in aprobados:
				stringRegreso = stringRegreso + "/(/ " + eachPendiente.nummemo.patrocinador.nombre
		
			return HttpResponse(stringRegreso)
		else: return HttpResponse("Datos incorrectos. Acceso no autorizado.")
	else: return HttpResponse("Acceso no autorizado.")

#Regresa una pagina con la lista de memos pendientes en caso de que no se encuentre un memo en la URL
#Regresa la pagina con el memo que se encuentra en la URL (en caso de que exista)
#Guarda la aprobacion o negacion del memo, en caso de que todas las firmas esten completas, envia un correo a los usuarios
def aprobarMemo(request):
	if 'usuario' not in request.session:
		return HttpResponseRedirect('/')
	else:
                u = request.session['usuario']
                us = u[0]
                usuario = Usuario.objects.get(usuario__exact = us)
                if usuario.cargo_id == 1:
                        return HttpResponseRedirect('/')
		if request.method == 'GET':
			if 'm' not in request.GET:
				usu = request.session['usuario']
				us = usu[0]
				u = Usuario.objects.get(usuario__exact=us)
				cargo_id = u.cargo.id
				lista_memos = []
				vigentes = memo.objects.filter(fecha_exp__gte = datetime.datetime.now())
				if cargo_id == 2 :
					for se in Semaforo.objects.filter(firmauno=False, nummemo__in=vigentes):
						lista_memos.append(se.nummemo)
					return render_to_response('aprobarmemos.html',{'memos' : lista_memos}, context_instance=RequestContext(request))
				else: 
					if cargo_id == 3:
						for se in Semaforo.objects.filter(firmados=False, nummemo__in=vigentes):
							lista_memos.append(se.nummemo)
						return render_to_response('aprobarmemos.html',{'memos' : lista_memos}, context_instance=RequestContext(request))
					else: 
						if cargo_id == 4:
							for se in Semaforo.objects.filter(firmatres=False, nummemo__in=vigentes):
								lista_memos.append(se.nummemo)
							return render_to_response('aprobarmemos.html',{'memos' : lista_memos}, context_instance=RequestContext(request))
						else: 
							if cargo_id == 5:
								for se in Semaforo.objects.filter(firmacuatro=False, nummemo__in=vigentes):
									lista_memos.append(se.nummemo)
								return render_to_response('aprobarmemos.html',{'memos' : lista_memos}, context_instance=RequestContext(request))
							else: 
								return HttpResponseRedirect('/')
                        else:
                                numemo = request.GET['m']
                                request.session['numemo'] = numemo
                                m = memo.objects.get(id_ext=numemo)
                                fechas = fecha_memo.objects.filter(id_ext=numemo)
                                return render_to_response('dvbo.html',{'memo' : m, 'fchas' : fechas}, context_instance=RequestContext(request))
		else:
                        listamails = []
                        for eme in Usuario.objects.all():
                                listamails.append(eme.email)
                        numem = request.session['numemo']
        		numero = numem
        		mensaje = 'El memo ' + numem + ' ha sido aprobado por todos los departamentos. Por favor visite el sistema de patrocinios para revisar los datos.'
        		del request.session['numemo']
        		usu = request.session['usuario']
        		us = usu[0]
        		u = Usuario.objects.get(usuario__exact=us)
        		cargo_id = u.cargo.id
        		bool_vb = request.POST['vbno']
        		coment = request.POST['comentariostf']
        		numer = Semaforo.objects.get(nummemo = numero)
        		nume = numer
                	if cargo_id == 2:
                 		s = nume
                 		if bool_vb == 'a':
                                        s.firmauno = True
                                        s.fechafirmuno = datetime.datetime.now()
                                        s.comentariosfirmauno = coment
   				else:
                                        s.firmauno = False
                                        s.fechafirmuno = datetime.datetime.now()
                                        s.comentariosfirmauno = coment
        			s.save()
        			if nume.firmauno & nume.firmados & nume.firmatres & nume.firmacuatro:
                                        send_mail('Memo aprobado', mensaje, 'no-reply@sistemapatrocinios.com', listamails)
        			return HttpResponseRedirect('/amemo')
        		else: 
        			if cargo_id == 3:
        				s = nume
        				if bool_vb == 'a':
                                        	s.firmados = True
                                        	s.fechafirmdos = datetime.datetime.now()
                                        	s.comentariosfirmados = coment
                                        else:
                                                s.firmados = False
                                                s.fechafirmdos = datetime.datetime.now()
                                                s.comentariosfirmados = coment
        				s.save()
        				if nume.firmauno & nume.firmados & nume.firmatres & nume.firmacuatro:
                                                send_mail('Memo aprobado', mensaje, 'no-reply@sistemapatrocinios.com', listamails)
        				return HttpResponseRedirect('/amemo')
        			else: 
        				if cargo_id == 4:
        					s = nume
        					if bool_vb == 'a':
                                                        s.firmatres = True
                                                	s.fechafirmtres = datetime.datetime.now()
                                                	s.comentariosfirmatres = coment
                                                else:
                                                        s.firmatres = False
                                                        s.fechafirmtres = datetime.datetime.now()
                                                        s.comentariosfirmatres = coment
        					s.save()
        					if nume.firmauno & nume.firmados & nume.firmatres & nume.firmacuatro:
                                                        send_mail('Memo aprobado', mensaje, 'no-reply@sistemapatrocinios.com', listamails)
        					return HttpResponseRedirect('/amemo')
        				else: 
        					if cargo_id == 5:
        						s = nume
        						if bool_vb == 'a':
                                                                s.firmacuatro = True
                                                        	s.fechafirmcuatro = datetime.datetime.now()
                                                        	s.comentariosfirmacuatro = coment
                                                        else:
                                                                s.firmacuatro = False
                                                                s.fechafirmcuatro = datetime.datetime.now()
                                                                s.comentariosfirmacuatro = coment
        						s.save()
        						if nume.firmauno & nume.firmados & nume.firmatres & nume.firmacuatro:
                                                                send_mail('Memo aprobado', mensaje, 'no-reply@sistemapatrocinios.com', listamails)
        						return HttpResponseRedirect('/amemo')

#Metodo para crear un nuevo patrocinador
def npatro(request):
	if 'usuario' not in request.session:
		return HttpResponseRedirect('/')
	else:
                u = request.session['usuario']
                us = u[0]
                usuario = Usuario.objects.get(usuario__exact = us)
                if usuario.cargo_id != 1:
                        return HttpResponseRedirect('/')
                else:
                        errors = []
        		if request.method == 'GET':
        			from django.db import connection
                                cursor = connection.cursor()
        			cursor.execute("SELECT nombre FROM memo_patrocinador")
                		row = cursor.rowcount
                		query = []
                		query = Patrocinador.objects.all()
                		errors = []
                		if row > 0:
                                        return render_to_response('alta_patrocinador.html',{'tablas': query}, context_instance=RequestContext(request))
                		else:
                			return render_to_response('alta_patrocinador.html', context_instance=RequestContext(request))
        		else:
                                if not request.POST.get('nombre',''):
                                        return render_to_response('alta_patrocinador.html',{'resultado' : ['No puede dar de alta un patrocinador en blanco'], 'tablas' : Patrocinador.objects.all()}, context_instance=RequestContext(request))
                                else:
                                        from django.db import connection
                                        cursor = connection.cursor()
                                        textoquery = 'SELECT * FROM memo_patrocinador WHERE nombre = \'' + request.POST['nombre'] + '\';'
                                        cursor.execute(textoquery)
                                        row = cursor.rowcount
                                        if row > 0:
                                                return render_to_response('alta_patrocinador.html',{'resultado' : ['Ese patrocinador ya se encuentra dado de alta'], 'tablas' : Patrocinador.objects.all()}, context_instance=RequestContext(request))
                                        else:
                        			p = Patrocinador(nombre=request.POST['nombre'])
                        			p.save()
                        			a = 'Patrocinador ' + request.POST['nombre'] + ' creado'			 			
                        			cursor.execute("SELECT nombre FROM memo_patrocinador")
                                		row = cursor.rowcount
                                		query = []
                                		query = Patrocinador.objects.all()
                        			return render_to_response('alta_patrocinador.html',{'resultado' : [a], 'tablas' : query}, context_instance=RequestContext(request))

#Regresa una pagina con los memos pendientes, aprobados y negados.
def semaforo(request):
	if 'usuario' not in request.session:
		return HttpResponseRedirect('/')
	else:	
		vigentes = memo.objects.filter(fecha_exp__gte = datetime.datetime.now())

		pend = Semaforo.objects.select_related().filter(firmauno=False, comentariosfirmauno__isnull=True) | Semaforo.objects.filter(firmados=False, comentariosfirmados__isnull=True) | Semaforo.objects.filter(firmatres=False, comentariosfirmatres__isnull=True) | Semaforo.objects.filter(firmacuatro=False, comentariosfirmacuatro__isnull=True)
		pendientes = pend.exclude(firmauno=False, comentariosfirmauno__isnull=False) 
		pendientes = pendientes.exclude(firmados=False, comentariosfirmados__isnull=False)
		pendientes = pendientes.exclude(firmatres=False, comentariosfirmatres__isnull=False)
		pendientes = pendientes.exclude(firmacuatro=False, comentariosfirmacuatro__isnull=False)
		pendientes = pendientes.filter(nummemo__in = vigentes)

		aprobados = Semaforo.objects.filter(firmauno=True, firmados=True, firmatres=True, firmacuatro=True)
		aprobados = aprobados.filter(nummemo__in=vigentes)
		
		negados = Semaforo.objects.filter(firmauno=False, comentariosfirmauno__isnull=False) | Semaforo.objects.filter(firmados=False, comentariosfirmados__isnull=False) | Semaforo.objects.filter(firmatres=False, comentariosfirmatres__isnull=False) | Semaforo.objects.filter(firmacuatro=False, comentariosfirmacuatro__isnull=False)
		negados = negados.filter(nummemo__in = vigentes)
		if 'm' not in request.GET:
			return render_to_response('sem.html', {'pendientes' : pendientes, 'aprobados':aprobados, 'negados':negados}, context_instance = RequestContext (request))
		else:
                        pe = request.GET['p']
			me = request.GET['m']
			mem = memo.objects.get(id_ext = me)
			regreso = Semaforo.objects.get(nummemo = mem)
			m = memo.objects.get(id_ext=me)
			fechas = fecha_memo.objects.filter(id_ext=me)
			if pe == 'p':
                                return render_to_response('info_memo.html', {'memo' : regreso, 'mmemo' : m, 'fchas' : fechas, 'color' : 'amarillo'}, context_instance = RequestContext (request))
                        else:
                                if pe == 'a':
                                        return render_to_response('info_memo.html', {'memo' : regreso, 'mmemo' : m, 'fchas' : fechas, 'color' : 'verde'}, context_instance = RequestContext (request))
                                else:
                                        if pe == 'n':
                                                return render_to_response('info_memo.html', {'memo' : regreso, 'mmemo' : m, 'fchas' : fechas, 'color' : 'rojo'}, context_instance = RequestContext (request))

#Regresa la pagina de alta de memo
def index( request ):
	if 'usuario' not in request.session:
		return HttpResponseRedirect('/')
	else:
                u = request.session['usuario']
                us = u[0]
                usuario = Usuario.objects.get(usuario__exact = us)
                if usuario.cargo_id != 1:
                        return HttpResponseRedirect('/')
                else:
                        errores = []
                        query = []
                        query = Patrocinador.objects.all()
                        return render_to_response('alta_memo.html',{'tablas' : query} , context_instance = RequestContext (request))

#Crea un nuevo memo
def nmemo(request):
	if 'usuario' not in request.session:
		return HttpResponseRedirect('/')
	else:
                u = request.session['usuario']
                us = u[0]
                usuario = Usuario.objects.get(usuario__exact = us)
                if usuario.cargo_id != 1:
                        return HttpResponseRedirect('/')
                else:
        		query = []
        		query = Patrocinador.objects.all()
        		if request.method == 'GET':
        			return render_to_response('alta_memo.html',{'tablas' : query} , context_instance = RequestContext (request))
        		else:
        			if request.method == 'POST':
        				p = Patrocinador.objects.get(id = request.POST['nombre_patrocinio'])
        				selected_days = request.POST.getlist('selected_day')
        				f_fecha = 0;
        				for day in selected_days:	
        					tamano = 'tam_%s'%day
        					autos = 'autos_%s'%day
        					asistentes = 'asistentes_%s'%day
        					descripcion = 'actividades_%s'%day
        					fecha = 'date%s'%day			
                				fm = fecha_memo (
								id_ext = request.POST['id_ext'],
								fecha = request.POST[fecha],
								tamano = request.POST[tamano],
								autos = request.POST[autos],
								asistentes = request.POST[asistentes],
								descripcion = request.POST[descripcion]
                                                )
        					fm.save()
        					if f_fecha == 0:
        						fecha_exp_sys = getExpDate(request.POST[fecha])
        						f_fecha = 1
        					
        					exito = "si"
        				m = memo (
        						id_ext = request.POST['id_ext'],
        						fecha_exp = fecha_exp_sys,
        						patrocinador = p,
        						fecha_ini = datetime.date.today(),
        						giro = request.POST['giro'],
        						producto = request.POST['producto'],
        						beneficio = request.POST['beneficio'],
        						evento = request.POST['nombre_evento'],
        						responsable_marco = request.POST['resp_marca'],
        						telefono = request.POST['telefono'],
        						responsable_area = request.POST['resp_area'],
        						ext_responsable = request.POST['ext_resp_a'],
        						asociacion = request.POST['asociacion']		
        				)
        				m.save()
                			s = Semaforo(nummemo = m, firmauno = False, firmados = False, firmatres = False, firmacuatro = False)
                        		s.save()
                        		fecha_ini = datetime.date.today()
				
                			if exito == "si":
                				return render_to_response('alta_memo.html', {'error' : 'no', 'id' : request.POST['id_ext'], 'fecha_exp' : fecha_exp_sys, 'fecha_ini' : fecha_ini, 'tablas' : query }, context_instance = RequestContext (request) )
                			else:
                				return render_to_response('alta_memo.html', {'error' : 'si', 'tablas' : query}, context_instance = RequestContext (request) )

#Crea la fecha de expiracion del memo basandose en la fecha de entrada del patrocinador
def getExpDate(date):
	date = date.split("-")
	day = int(date[2])
	month = int(date[1])
	year = int(date[0])
	
	date_ini = datetime.date(year,month,day)
	day_ini = date_ini.ctime()[0:3]
	day_exp = ''
	
	if day_ini == "Mon":
			dif = datetime.timedelta(days=-4)
			date_exp = date_ini + dif
	if day_ini == "Tue":
			dif = datetime.timedelta(days=-5)
			date_exp = date_ini + dif
	if day_ini == "Wed":
			dif = datetime.timedelta(days=-6)
			date_exp = date_ini + dif
	if day_ini == "Thu":
			dif = datetime.timedelta(days=-7)
			date_exp = date_ini + dif
	if day_ini == "Fri":
			dif = datetime.timedelta(days=-8)
			date_exp = date_ini + dif
	if day_ini == "Sat":
			dif = datetime.timedelta(days=-9)
			date_exp = date_ini + dif
			
	return date_exp
	
	
